﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;

namespace AnaxibiaStudios.Smug.Internal
{
  public class DefaultConstructorInfoDataHelper
  {
    public DefaultConstructorInfoDataHelper() { }
  }

  public class DefaultConstructorInfo : ConstructorInfo
  {
    private ConstructorInfo _ctor;
    private Type _declaringType;

    public DefaultConstructorInfo(Type declaringType)
    {
      _declaringType = declaringType;
      _ctor = typeof(DefaultConstructorInfoDataHelper).GetConstructor(new Type[] { });
    }

    public override Type DeclaringType { get { return _declaringType; } }

    public override ParameterInfo[] GetParameters() { return _ctor.GetParameters(); }
    public override MethodAttributes Attributes { get { return _ctor.Attributes; } }
    public override MethodImplAttributes GetMethodImplementationFlags() { return _ctor.GetMethodImplementationFlags(); }
    public override object[] GetCustomAttributes(Type attributeType, bool inherit) { return _ctor.GetCustomAttributes(attributeType, inherit); }
    public override object[] GetCustomAttributes(bool inherit) { return _ctor.GetCustomAttributes(inherit); }
    public override bool IsDefined(Type attributeType, bool inherit) { return _ctor.IsDefined(attributeType, inherit); }
    public override string Name { get { return _ctor.Name; } }
    public override Type ReflectedType { get { return _ctor.ReflectedType; } }

    public override object Invoke(BindingFlags invokeAttr, Binder binder, object[] parameters, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); }
    public override object Invoke(object obj, BindingFlags invokeAttr, Binder binder, object[] parameters, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); }
    public override RuntimeMethodHandle MethodHandle { get { throw new NotImplementedException(); } }
  }
}
